#include "task.h"
#include"FM17550.h"
#include "dev.h"

Task_t Task_list[TASK_NUM];


/**
 * @description: 创建一个任务
 * @param {Task_t} *task
 * @param {uint32_t} delay_time
 * @param {func_t} exe
 * @param {char *} name
 * @return {*}
 */
void vTask_create(Task_t *task,uint32_t delay_time,func_t exe,char * name)
{
    task->delay_time = delay_time;
    task->exe = exe;
    task->name = name;
    task->pre_time = 0;
}



/**
 * @description: 1ms任务
 * @return {*}
 */
float vdd_val = 0;
float bat_voltage = 0;
static void _1ms_task(void) {
;
}


/**
 * @description: 10ms任务
 * @return {*}
 */
static void _10ms_task(void) {
    /*获取电压和电流的ADC值*/
    ;
}

/**
 * @description: 100ms任务
 * @return {*}
 */
static void _100ms_task(void) {
    ;
}



/**
 * @description: 初始化任务
 * @return {*}
 */
void Task_Init(void) {
    vTask_create(&Task_list[0],_1ms_TIMES,_1ms_task,"1ms task");     /*1ms任务*/
    vTask_create(&Task_list[1],_10ms_TIMES,_10ms_task,"10ms task");   /*10ms任务*/
    vTask_create(&Task_list[2],_100ms_TIMES,_100ms_task,"100ms task"); /*100ms任务*/
}


/**
 * @description: 任务运行
 * @param {Task_t} *task
 * @return {*}
 */
void task_run(Task_t *task) {
    uint32_t current_time = get_time_Interval(task->pre_time);
    if(current_time >= task->delay_time) {
        task->pre_time = get_current_timestamp();   /*更新时间戳*/
        task->exe();
    }
}


/**
 * @description: 任务调度
 * @return {*}
 */
void Task_schedule(void) {
    for(int i = 0;i < TASK_NUM;i++) {
        task_run(&Task_list[i]);
    }
}

